/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.marcelo.comun.validadores;

/**
 *
 * @author marcelo
 * 
 * Clase para comparar patrones y ser utilizados en las capas superiores del sitema
 * 
 */
public class MatcherClass {
    
    public static enum TIPOS_VALIDACION {
        CAMPO_ENTERO_POSITIVO,CAMPO_ENTEROS,CAMPO_DECIMALES_POSITIVO, CAMPO_DECIMALES,
        CAMPO_PRECISION_16_POSITIVO , CAMPO_PRECISION_16,CAMPO_PRECISION_32_POSITIVO, CAMPO_PRECISION_32,
        CAMPO_DINERO_POSITIVO,CAMPO_DINERO
    }
    private TIPOS_VALIDACION tipoValidacion;
    private String valorAComparar;
    
    
    private static final String CAMPO_TEXTO =  "^(\\S)(.){1,75}(\\S)$"; 
    private static final String CAMPO_ENTERO_POSITIVO = "(\\d){1,9}";
    private static final String CAMPO_ENTEROS = "(-)?" + CAMPO_ENTERO_POSITIVO;
    private static final String CAMPO_DECIMALES_POSITIVO =  "(\\d){1,10}(\\.(\\d){1,10})?";
    private static final String CAMPO_PRECISION_16_POSITIVO=  "(\\d){1,16}(\\.(\\d){1,2})?";
    private static final String CAMPO_PRECISION_32_POSITIVO=  "(\\d){1,32}(\\.(\\d){1,2})?";
    private static final String CAMPO_PRECISION_16=  "(-)?" + CAMPO_PRECISION_16_POSITIVO;
    private static final String CAMPO_PRECISION_32=  "(-)?" + CAMPO_PRECISION_32_POSITIVO;
    private static final String CAMPO_DECIMALES = "(-)?" + CAMPO_DECIMALES_POSITIVO;
    private static final String CAMPO_DINERO_POSITIVO =  "(\\d){1,15}(\\.(\\d){2})?";
    private static final String CAMPO_DINERO =  "(-)?" + CAMPO_DINERO_POSITIVO;
    
    
       
    public MatcherClass(TIPOS_VALIDACION tipo, String comparar) {
       tipoValidacion = tipo;
       valorAComparar = comparar;
    }
    
    public Boolean match () {
      String regex;   
      switch (tipoValidacion) {
          case CAMPO_DECIMALES: 
              regex = CAMPO_DECIMALES;
              break;
          case CAMPO_DECIMALES_POSITIVO:
              regex = CAMPO_DECIMALES_POSITIVO;
              break;
          case CAMPO_DINERO:
              regex = CAMPO_DINERO;
              break;
          case CAMPO_DINERO_POSITIVO:
              regex = CAMPO_DINERO_POSITIVO;
              break;
          case CAMPO_ENTEROS:
              regex = CAMPO_ENTEROS;
              break;
          case CAMPO_ENTERO_POSITIVO:
              regex = CAMPO_ENTERO_POSITIVO;
              break;
          case CAMPO_PRECISION_16_POSITIVO:
              regex = CAMPO_PRECISION_16_POSITIVO;
              break;
          case CAMPO_PRECISION_16:
              regex = CAMPO_PRECISION_16;
              break;
          case CAMPO_PRECISION_32_POSITIVO:
              regex = CAMPO_PRECISION_32_POSITIVO;
              break;
          case CAMPO_PRECISION_32:
              regex = CAMPO_PRECISION_32;
              break;
           default:
               regex = CAMPO_TEXTO; 
      }  
      return valorAComparar.matches(regex);
    }
    
    public String getMensaje(){
        String mensaje;
        switch (tipoValidacion) {
          case CAMPO_DECIMALES: 
              mensaje = "Solo numeros decimales";
              break;
          case CAMPO_DECIMALES_POSITIVO:
              mensaje = "Solo numeros decimales positivos";
              break;
          case CAMPO_DINERO:
              mensaje = "Solo numeros de 15 digitos y dos posiciones decimales";
              break;
          case CAMPO_DINERO_POSITIVO:
              mensaje = "Solo numeros positivos de 15 digitos y dos posiciones decimales";
              break;
          case CAMPO_ENTEROS:
              mensaje = "Solo numeros enteros";
              break;
          case CAMPO_ENTERO_POSITIVO:
              mensaje = "Solo numeros enteros positivos";
              break;
           default:
               mensaje = CAMPO_TEXTO; 
      }
      return mensaje;  
        
    }
    
}
